#include "myString.h"
#include <cstring>

myString::myString(const char* pstr )
{
	if (pstr)
	{
		m_data = new char[strlen(pstr) + 1];
		strcpy(m_data, pstr);
	}
	else
	{
		m_data = new char[1];
		*m_data = '\0';
	}
}

myString::myString(const myString& str)
{
	m_data = new char[strlen(str.m_data) + 1];
	strcpy(m_data,str.m_data);
}

myString& myString::operator=(const myString& str)
{
	if (this == &str)	return *this;
	delete []m_data;
	m_data = new char[strlen(str.m_data) + 1];
	strcpy(m_data, str.m_data);
	return *this;
}
//注意不能加&，不能返回本地变量的地址********
myString myString::operator+(const myString & str) 
{//新建一个长度为自身+连接字符的字符串，逐段拷贝
	myString newString;
	newString.m_data = new char[strlen(m_data) + strlen(str.m_data) + 1];
	strcpy(newString.m_data,m_data);
	strcat(newString.m_data,str.m_data);
	return newString;
}
//+=在原来字符串实现，所以新建char *，全部拷贝过去，再把m_data指向
myString& myString::operator+=(const myString & str)
{
	char *newData = new char[strlen(m_data) + strlen(str.m_data) + 1];
	strcpy(newData,m_data);
	strcat(newData,str.m_data);
	delete[]m_data;
	m_data = newData;
	return *this;
}

bool myString::operator==(const myString& str) const
{
	if(strlen(m_data) != strlen(str.m_data))
		return false;
	return strcmp(m_data, str.m_data) ? false : true;
}

char & myString::operator[](int index)
{
	if (index > strlen(m_data))
		throw "invalid index";
	else
		return m_data[index];
}


myString::~myString()
{

	delete []m_data;
	m_data = NULL;
	
}

ostream& operator<<(ostream &os, const myString &str)//输出
{
	os << str.m_data << endl;
	return os;
}
